package TRSS
import (
	"fmt"
	"gopkg.in/yaml.v2"
	"time"
	"strings"
	"strconv"
	"os"
	"github.com/olekukonko/tablewriter"
)
//添加主人QQ
func TRSS_addMasterQQ(GoBoxPath, BotPath string) {
	os.Chdir(GoBoxPath)
	configPath := BotPath + "/config/config/other.yaml"
	// 判断是否存在，不存在则返回
	// 打印当前目录
	fmt.Println("配置文件:", configPath)
	if _, err := os.Stat(configPath); os.IsNotExist(err) {
		fmt.Println(Red, "配置文件不存在,请完成初始化...", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	data, err := readFile(configPath)
	if err != nil {
		// 红色字体
		fmt.Println(Red, "读取配置文件失败：", err, Reset)
		time.Sleep(2 * time.Second)
	}
	var AdminConfig Admin
	err = yaml.Unmarshal(data, &AdminConfig)
	if err != nil {
		fmt.Println(Red, "解析配置文件失败", err, Reset)
		return
	}
	var Qadmin string
	fmt.Printf("请输入主人QQ频道号:")
	_, err = fmt.Scanln(&Qadmin)
	if err != nil {
		fmt.Println(Red, "输入错误，请重新输入", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	if len(Qadmin) < 6 {
		fmt.Println(Red, "输入错误，请配置正确的QQ频道号", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	for _, qq := range AdminConfig.MasterQQ {
		if qq == Qadmin {
			fmt.Println(Red, "主人QQ已存在", Reset)
			time.Sleep(2 * time.Second)
			return
		}
	}
	// 拼接
	Qadminstr := fmt.Sprintf("%s", Qadmin)
	AdminConfig.MasterQQ = append(AdminConfig.MasterQQ, Qadminstr)
	// 保存配置文件
	data, err = yaml.Marshal(&AdminConfig)
	if err != nil {
		fmt.Println(Red, "保存配置文件失败", err, Reset)
		return
	}
	modifiedYAMLData := addSpaceBeforeHyphen(string(data))
	err = writeFile(configPath, modifiedYAMLData)
	if err != nil {
		fmt.Println(Red, "写入配置文件失败", err, Reset)
		return
	}
	// 绿色字体
	fmt.Println(Green, "添加成功,重启生效", Reset)
	time.Sleep(2 * time.Second)
}
//删除主人QQ
func TRSS_delMasterQQ(GoBoxPath, BotPath string) {
	// 读取配置文件
	os.Chdir(GoBoxPath)
	configPath := BotPath + "/config/config/other.yaml"
	// 判断是否存在，不存在则返回
	// 打印当前目录
	fmt.Println("配置文件:", configPath)
	if _, err := os.Stat(configPath); os.IsNotExist(err) {
		fmt.Println(Red, "配置文件不存在,请完成初始化...", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	data, err := readFile(configPath)
	if err != nil {
		fmt.Println(Red, "读取配置文件失败", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}
	var AdminConfig Admin
	err = yaml.Unmarshal(data, &AdminConfig)
	if err != nil {
		fmt.Println(Red, "解析配置文件失败", err, Reset)
		return
	}

	// 提示用户输入要删除的主人 QQ 号或频道号
	var Qadmin string
	fmt.Printf("请输入要删除的主人QQ频道号:")
	_, err = fmt.Scanln(&Qadmin)
	if err != nil {
		fmt.Println(Red, "输入错误，请重新输入", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	if len(Qadmin) < 6 {
		fmt.Println(Red, "输入错误，请重新输入", Reset)
		time.Sleep(2 * time.Second)
		return
	}

	// 查找并删除主人 QQ 号或频道号
	found := false
	for i, qq := range AdminConfig.MasterQQ {
		if qq == Qadmin {
			if len(AdminConfig.MasterQQ) == 1 {
				fmt.Println(Red, "至少保留一个主人QQ频道号", Reset)
				time.Sleep(2 * time.Second)
				return
			}
			AdminConfig.MasterQQ = append(AdminConfig.MasterQQ[:i], AdminConfig.MasterQQ[i+1:]...)
			found = true
			break
		}
	}
	if !found {
		fmt.Println(Red, "主人QQ频道号不存在", Reset)
		time.Sleep(2 * time.Second)
		return
	}

	// 保存配置文件
	data, err = yaml.Marshal(&AdminConfig)
	if err != nil {
		fmt.Println(Red, "保存配置文件失败", err, Reset)
		return
	}
	modifiedYAMLData := addSpaceBeforeHyphen(string(data))
	err = writeFile(configPath, modifiedYAMLData)
	if err != nil {
		fmt.Println(Red, "写入配置文件失败", err, Reset)
		return
	}
	// 绿色字体
	fmt.Println(Green, "删除成功,重启生效", Reset)
	time.Sleep(2 * time.Second)
}
//多账号添加主人
func TRSS_addMaster(GoBoxPath, BotPath string) {
	var (
		BotQQ    string
		MasterQQ string
	)
	// 读取配置文件
	os.Chdir(GoBoxPath)
	configPath := BotPath + "/config/config/other.yaml"
	//判断是否存在，不存在则返回
	//打印当前目录
	fmt.Println("配置文件:", configPath)
	if _, err := os.Stat(configPath); os.IsNotExist(err) {
		fmt.Println(Red, "配置文件不存在,请完成初始化...", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	data, err := readFile(configPath)
	if err != nil {
		fmt.Println(Red, "读取配置文件失败", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}
	var AdminConfig Admin
	err = yaml.Unmarshal(data, &AdminConfig)
	if err != nil {
		fmt.Println(Red, "解析配置文件失败", err, Reset)
		return
	}
	// 提示用户输入要添加的 Bot机器人账户
	fmt.Printf("请输入要添加的Bot机器人账户:")
	fmt.Scanln(&BotQQ)
	// 验证 Bot机器人账户输入
	if len(BotQQ) < 6 {
		fmt.Println(Red, "Bot机器人账户输入错误", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	// 验证 Bot机器人账户是否已存在
	for i := 0; i < len(AdminConfig.Master); i++ {
		botid := strings.Split(AdminConfig.Master[i], ":")[0]
		if botid == BotQQ {
			fmt.Println(Red, "Bot机器人账户已存在", Reset)
			time.Sleep(2 * time.Second)
			return
		}
	}
	fmt.Printf("请输入要添加的主人QQ号或频道号:")
	fmt.Scanln(&MasterQQ)
	// 验证主人 QQ 号或频道号输入
	str := fmt.Sprintf("%s:%s", BotQQ, MasterQQ)
	if len(MasterQQ) < 1 {
		fmt.Println(Red, "主人QQ号或频道号不能为空", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	// 添加 Bot机器人账户和主人 QQ 号
	AdminConfig.Master = append(AdminConfig.Master, str)
	// 保存配置文件
	data, err = yaml.Marshal(&AdminConfig)
	if err != nil {
		fmt.Println(Red, "保存配置文件失败", err, Reset)
		return
	}
	modifiedYAMLData := addSpaceBeforeHyphen(string(data))
	err = writeFile(configPath, modifiedYAMLData)
	if err != nil {
		fmt.Println(Red, "写入配置文件失败", err, Reset)
		return
	}
	// 绿色字体
	fmt.Println(Green, "添加成功,重启生效", Reset)
	time.Sleep(2 * time.Second)

}
// 多账号删除主人
func TRSS_deleteMaster(GoBoxPath, BotPath string) {
	var BotQQ string
	// 读取配置文件
	os.Chdir(GoBoxPath)
	configPath := BotPath + "/config/config/other.yaml"
	//判断是否存在，不存在则返回
	//打印当前目录
	fmt.Println("配置文件:", configPath)
	if _, err := os.Stat(configPath); os.IsNotExist(err) {
		fmt.Println(Red, "配置文件不存在,请完成初始化...", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	data, err := readFile(configPath)
	if err != nil {
		fmt.Println(Red, "读取配置文件失败", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}
	var AdminConfig Admin
	err = yaml.Unmarshal(data, &AdminConfig)
	if err != nil {
		fmt.Println(Red, "解析配置文件失败", err, Reset)
		return
	}
	// 提示用户输入要删除的 Bot机器人账户
	fmt.Printf("请输入要删除的Bot机器人账户:")
	fmt.Scanln(&BotQQ)
	// 不能为空
	if len(BotQQ) == 0 {
		fmt.Println(Red, "Bot机器人账户不能为空", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	if len(BotQQ) < 6 {
		fmt.Println(Red, "Bot机器人账户输入错误", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	// 查找并删除 Bot机器人账户及其对应的主人 QQ 号
	var found bool
	for i := 0; i < len(AdminConfig.Master); i++ {
		botid := strings.Split(AdminConfig.Master[i], ":")[0]
		if botid == BotQQ {
			AdminConfig.Master = append(AdminConfig.Master[:i], AdminConfig.Master[i+1:]...)
			found = true
			break
		}
	}
	if !found {
		fmt.Println(Red, "Bot机器人账户", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	// 保存配置文件
	data, err = yaml.Marshal(&AdminConfig)
	if err != nil {
		fmt.Println(Red, "保存配置文件失败", err, Reset)
		return
	}
	modifiedYAMLData := addSpaceBeforeHyphen(string(data))
	err = writeFile(configPath, modifiedYAMLData)
	if err != nil {
		fmt.Println(Red, "写入配置文件失败", err, Reset)
		return
	}
	// 绿色字体
	fmt.Println(Green, "删除成功,重启生效", Reset)
	time.Sleep(2 * time.Second)
}

//查看/频道主人
func TRSS_master_show(GoBoxPath,BotPath string) {
	//读取配置文件
	//解析配置文件
	//测试获取配置文件的内容
	//保存配置文件
	os.Chdir(GoBoxPath)
	configPath := BotPath + "/config/config/other.yaml"
	//判断是否存在，不存在则返回
	//打印当前目录
	fmt.Println("配置文件:", configPath)
	if _, err := os.Stat(configPath); os.IsNotExist(err) {
		fmt.Println(Red,"配置文件不存在,请完成初始化...", Reset)
		time.Sleep(2 * time.Second)
		return
	}
	data, err := readFile(configPath)
	if err != nil {
		fmt.Println(Red, "读取配置文件失败", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}
	var AdminConfig Admin
	err = yaml.Unmarshal(data, &AdminConfig)
	if err != nil {
		fmt.Println(Red, "解析配置文件失败", err, Reset)
		return
	}

	// 输出主人 QQ
	// 创建表格对象
	table1 := tablewriter.NewWriter(os.Stdout)
	// 设置表格标题
	table1.SetHeader([]string{"序列id", "主人QQ"})

	// 设置表格的列宽度为20
	table1.SetColWidth(20)
	// 添加数据到表格中
	for i, v := range AdminConfig.MasterQQ {
		if v == "stdin" {
			continue
		}
		table1.Append([]string{strconv.Itoa(i+1), v})
	}
	// 渲染表格
	fmt.Println()
	fmt.Println("QQ/频道主人:")
	table1.SetColMinWidth(0, 20)
	table1.SetColMinWidth(1, 40)
	//内容左
	table1.SetAlignment(tablewriter.ALIGN_LEFT)
	table1.Render()


	// 输出多账号主人
	// 创建表格对象

	table2 := tablewriter.NewWriter(os.Stdout)
	// 设置表格标题
	table2.SetHeader([]string{"Bot账户", "主人账号"})
	// 设置表格的列宽度为20
	table2.SetColWidth(20)
	// 添加数据到表格中
	for _, v := range AdminConfig.Master {
		fields := strings.Split(v, ":")
		if fields[1] == "stdin" {
			continue
		}
		table2.Append([]string{fields[0], fields[1]})
	}
	// 渲染表格
	fmt.Println()
	fmt.Println("多账户主人:")
	table2.SetColMinWidth(0, 20)
	table2.SetColMinWidth(1, 40)
	//内容左
	table2.SetAlignment(tablewriter.ALIGN_LEFT)
	table2.Render()

	// 按回车键继续
	fmt.Printf("\n按回车键继续")
	fmt.Scanln()
}

// 多账号配置 # Bot账号:主人帐号01